// 公共函数

/**
 * @description 更新缓存
 * @author start2004
 * @since 2025-08-12
 *
 * @param  {string} key - 键值
 * @param {*} value - 缓存数据
 * @returns {void}
 */
export async function setStorage(key, value) {
  await chrome.storage.local.set({ [key]: value });
}

/**
 * @description 获取缓存
 * @author start2004
 * @since 2025-08-12
 *
 * @param {string} key - 缓存键值
 * @returns {*} 键值对应数据
 */
export async function getStorage(key) {
  const result = await chrome.storage.local.get(key);
  if(key in result){
    return result[key];
  } else {
    return null;
  }
}

/**
 * @description 删除缓存数据
 * @author start2004
 * @since 2025-08-12
 *
 * @param {string} key - 缓存键值
 * @returns {void}
 */
export async function removeStorage(key) {
  await chrome.storage.local.remove(key);
}

/**
 * @description 返回随机字符串UUID
 * @author start2004
 * @since 2025-08-12
 *
 * @returns {string} UUID
 *
 * @example
 * ```js
 * generateId(); // '1755078555068'
 * ```
 */
export function generateId() {
  return Date.now().toString();
}

/**
 * @description 格式化日期
 * @author start2004
 * @since 2025-08-12
 *
 * @param dateString {string} - 日期
 * @param lang {string} - 语言格式
 * @returns {string} 格式化后日期，格式Y-m-d
 *
 * @example
 * ```js
 * formatDate("2025-08-12T00:00:00", "zh_CN"); // 返回 "2025-08-12"，"Aug 12, 2025"
 * formatDate("2025-08-12T00:00:00", "en"); // 返回 "Aug. 12, 2025"
 * ```
 */
export function formatDate(dateString, lang) {
  /**
   * @since 2025-08-12 区分中英文
   */
  const date = new Date(dateString);
  let year = date.getFullYear();
  let month = date.getMonth()+1;
  const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
  let enmonth = months[month-1];

  if(month < 10) month = "0"+ month;
  let day = date.getDate();
  let enday = day;
  if(day < 10) day = "0"+ day;

  /**
   * @since 2025-08-12 中文时间，2025-08-12
   * @since 2025-08-12 英文时间，Aug. 12, 2025，X推特目前用的
   */
  if(lang === undefined) lang = "zh_CN";
  let formatDay;
  switch (lang){
    case "en":
      formatDay = `${enmonth}. ${enday}, ${year}`;
      break;
    case "zh_CN":
    default:
      formatDay = `${year}-${month}-${day}`;
  }
  return formatDay;
}

/**
 * @title 判断浏览器类型
 * @author start2004
 * @since 2025-08-26
 *
 * @return {string} 浏览器类型，返回'chrome'或'edge'，如果不是这两种浏览器则返回'unknown'
 */
export function GetBrowserType() {
  // 判断是否为Edge浏览器
  // Edge浏览器的navigator.userAgent中包含'Edg/'或'Edge/'
  if (/Edg\//i.test(navigator.userAgent)) {
    return 'edge';
  }
  // 判断是否为Chrome浏览器
  // Chrome浏览器的navigator.userAgent中包含'Chrome/'，但不包含'Edg/'
  else if (/Chrome\//i.test(navigator.userAgent) && !/Edg\//i.test(navigator.userAgent)) {
    return 'chrome';
  }
  // 其他浏览器返回unknown
  else {
    return 'unknown';
  }
}

/**
 * @description 获取版本号
 * @author start2004
 * @since 2025-08-26
 *
 * @return {version} 返回版本号0.1.0，如果开发版本，增加dev-0.1.0
 */
export async function getVersion(){
  let version = chrome.runtime.getManifest().version;
  let debug = await isDebugMode();
  if(debug){
    version = "dev-" +version;
  } else {}

  return version;
}

/**
 * @title 判断是否开发者模式
 * @author start2004
 * @since 2025-08-26
 *
 * @return {boolean} 如果处于调试模式则返回true，否则返回false
 */
export async function isDebugMode() {
  try {
    // 获取扩展信息
    const extensionInfo = await new Promise((resolve, reject) => {
      chrome.management.getSelf((info) => {
        if (chrome.runtime.lastError) {
          reject(chrome.runtime.lastError);
        } else {
          resolve(info);
        }
      });
    });

    /**
     * @since 2025-08-26 根据安装方式判断
     */
    // 判断installType是否为development
    return extensionInfo.installType === 'development';
  } catch (error) {
    console.error('获取扩展信息失败:', error);
    // 出错时默认返回false
    return false;
  }
}

/**
 * @description 设置图标上数字
 * @author start2004
 * @since 2025-09-26
 *
 * @param text {string} - 图标上显示的信息
 */
export function setBarText(text){
  chrome.action.setBadgeBackgroundColor({ color: '#EF4444' });
  chrome.action.setBadgeTextColor({ color: '#FFFFFF' });
  chrome.action.setBadgeText({text: text});
}